package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set接口是Collection接口的子接口
 * Set接口存储数据，特点:无序，无下标，元素不可以重复，
 *                   子实现类：存null，，不可以存null
 * 常用方法：Set 接口的方法继承与Collection 接口
 *         add(),remove(),contains(),size(),clear();
 * 迭代器：Iterator
 * 具体实现类：
 * ①HashSet【常用】：由哈希算法实现保存数据集合！
 *   特定：不保证元素顺序，不允许元素重复，可以存null值
 *   Set的方法 HashSet 方法一致
 * ②LinkedHashSet【偶尔用】：可以存null，不允许元素重复，保证元素顺序！
 * ③TreeSet【基本不用】：
 *
 */
public class SetAPI {
    @Test
    public void testSet(){
        //创建set集合--多态方式--保证数据唯一性
        Set<String> set=new HashSet<>();
         //add()  父类Set方法 | 子类 HashSet add()
        set.add(new String("睁眼我"));
        set.add(new String("荷叶鸡"));
        set.add(new String("六星街"));
        set.add(new String("烧子鹅"));
        System.out.println("set集合打印"+set);
        //remove方法--重写与Collection
        set.remove("烧子鹅"); //返回值：boolean
        System.out.println("删除set集合元素"+set);
        boolean b=set.contains("烧子鹅");
        System.out.println("判断是否删除："+b);
        System.out.println("Set集合元素个数："+set.size());
        //set.clear();
        //System.out.println("是否清空set集合");
        //使用Iterator 遍历Set集合数据
        //1.通过Set集合 调用 iterator() 返回：Iterator实例
       Iterator<String> it=set.iterator();
        //2.遵循迭代器使用规则：问，取，删---删除null值
       while(it.hasNext()){ //问：集合是否有数据
           String str=it.next(); //取：获取元素
           if("null".equals(str)){//引用类型【对象】：null值
               it.remove(); //删除
           }
       }
        //3.迭代器中打印元素：数据
        System.out.println("Set集合打印元素："+set);
    }
}
